Spark集成S3 Service
Spark的DataSource支持S3和Swift,考虑到Ceph也提供了S3和Swift的API,而C++的效率也是Python难以望其项背的,所以Spark+Ceph(S3 Service)可能是一个比较合适的方案。
如果想试试Spark with Swift,可以参考Accessing OpenStack Swift from Spark这篇文章,这里不再涉及。
由于我是配置haddop的core-site.xml,所以下面sc的配置并不用,开箱即用
spark-shell
Spark shell在启动前,需要保证HDFS/YARN已经启动,并且使用–jars指定aws-java-sdk和hadoop-aws两个jar包的位置。我的参数比较多图省事创建了个shell脚本存着。
进入shell以后:
由于我们在sc这里设置了hadoop的配置,所以haddop的core-site.xml那边就不要再设置了,否则会出现参数覆盖的问题。
使用wholeTextFiles处理文件夹里的所有文件,比较适合存放大量小图片的目录:
Spark SQL
1、没有找到像HDFS或者本地文件这种load data [local] inpath into table xxx这种比较方便的直接从S3导入到hive表的方法。绕路的方法就是hadoop distcp s3a:// -> hdfs://,然后再在SPARK SQL里load。
2、没有找到像Spark集成SQL这种CREATE TEMPORARY TABLE USING XX.XX.XX OPTION (XXX)的办法。其实这种在SPARK SQL里用才是比较直接的,并且没有可以绕开的方法。对于本质是结构化的文本文件来说,使用S3来存储实际没有太大意义;对于非结构化的图片、视频等,如果没有SQL入口的话,就只能强迫用户编写Spark APP来处理了,相对来说门槛更高一点。
参考hortonworks为Redshift写的插件,还是应该提供SQL入口,更友好一些,类似: